package com.demo.core.dao;

import java.util.List;
import java.util.Map;

import com.demo.core.dao.base.BaseCoreDao;
import com.demo.core.dao.base.support.SearchDaoSupport;
import com.demo.core.model.Function;

/**
 * 功能数据访问层接口
 * 
 * @author ryuu.kk
 */
public interface FunctionDao extends BaseCoreDao<Function, Long>, SearchDaoSupport<Function> {
	
	/**
	 * 更新嵌套集合Left:Right坐标
	 * @param functionInfo 集合
	 * @return 操作数
	 * @deprecated 未解决更新左序和右序问题
	 */
	int updateNestedSet(Map<String, Object> functionInfo);
	
	/**
	 * 查询功能信息树结构
	 * @param params 树节点,深度数组
	 * @return 树List
	 */
	Function tree(Map<String, Object> params);
	
	/**
	 * 查询功能信息树结构
	 * @param functionId 从指定功能节点开始查找
	 * @param depth 树深度
	 * @return 功能树结构模型
	 */
	Function tree(Long functionId, int... depth);
	
	/**
	 * 查询功能信息树结构
	 * @param functionId 从指定功能节点开始查找
	 * @param depth 树深度
	 * @return 功能树结构模型
	 */
	Function tree(Long functionId, Long siteGroupId, int... depth);
	
	/**
	 * 根据根节点ID查询所有子功能
	 * @param functionId 功能ID
	 * @return 功能对象列表
	 */
	List<Function> query(Long functionId);
	
	/**
	 * 根据根节点ID查询所有子功能
	 * @param functionId 功能ID
	 * @param siteGroupId 站点组ID
	 * @return 功能对象列表
	 */
	List<Function> query(Long functionId, Long siteGroupId);
}